﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.model;
using l1cs.server.serverpackets;

namespace l1cs.server.clientpackets
{
    public class C_TradeOK : ClientBasePacket
    {
        private const String _C_TRADE_CANCEL = "[C] C_TradeOK";
        private static Logger _log = Logger.getLogger( typeof( C_TradeOK ).FullName );

        public C_TradeOK( byte[] abyte0, ClientThread clientthread )
            : base( abyte0 )
        {

            L1PcInstance player = clientthread.getActiveChar();
            L1PcInstance trading_partner = (L1PcInstance)L1World.getInstance()
                    .findObject( player.getTradeID() );
            if ( trading_partner != null )
            {
                player.setTradeOk( true );

                if ( player.getTradeOk() && trading_partner.getTradeOk() ) // 共にOKを押した
                {
                    // (180 - 16)個未満ならトレード成立。
                    // 本来は重なるアイテム（アデナ等）を既に持っている場合を考慮しないければいけない。
                    if ( player.getInventory().getSize() < ( 180 - 16 )
                            && trading_partner.getInventory().getSize() < ( 180 - 16 ) ) // お互いのアイテムを相手に渡す
                    {
                        L1Trade trade = new L1Trade();
                        trade.TradeOK( player );
                    }
                    else // お互いのアイテムを手元に戻す
                    {
                        player.sendPackets( new S_ServerMessage( 263 ) ); // \f1一人のキャラクターが持って歩けるアイテムは最大180個までです。
                        trading_partner.sendPackets( new S_ServerMessage( 263 ) ); // \f1一人のキャラクターが持って歩けるアイテムは最大180個までです。
                        L1Trade trade = new L1Trade();
                        trade.TradeCancel( player );
                    }
                }
            }
        }

        override
        public String getType()
        {
            return _C_TRADE_CANCEL;
        }
    }
}